/**
 * MailServer es reponsable de comunicarse con los objetos MailCliente para
 * proporcionarle los servicios necesarios.
 * 
 */
package server;

import client.MailClient;
import client.Message;
import java.util.LinkedList;

/**
 *
 * @author Lab-214-21
 * @version 1.0.0
 */
public class MailServer {
    private String nameServer;
    private LinkedList<MailClient> clientes;
    private LinkedList<Message>  mensajes;
 
    /**
     * Contructor de la clase, recibe como parametro el nombre con el cual
     * se identificara al servidor posteriormente.
     * @param nombre 
     */
    public MailServer(String nombre) {     
        nameServer = nombre;
        clientes = new LinkedList<>();
        mensajes = new LinkedList<>();
    }
    
    /**
     * Método que obtiene el número de mensajes esperando para el usuario que 
     * los solicita.
     * @param name String
     * @return int Un entero que es el resultado
     */
    public int getMessagesWaiting(String name){
        int cont = 0;
        for (int i = 0; i < mensajes.size(); i++) {
            Message menj  = mensajes.get(i);
            if (menj.getDestinatario().equals(name)) {
                cont++;
            }            
        }
        return cont;
    }
    
    /**
     * Método que devuelve el siguiente mensaje para el usuario que lo solicita.
     * @param name String
     * @return Message Un objeto Message con el mensaje del usuario
     */
    public Message getNextMessage(String name){ 
        for (int i = 0; i < mensajes.size(); i++) {
            Message menj = mensajes.get(i);
            if (menj.getDestinatario().equals(name)) {
                mensajes.remove(i);
                return menj;
            }
        }
        return null;
    }
    
    /**
     * Método que lista todos los mensajes pendientes que tiene el servidor
     * de correo.
     */
    public void listarMensajes(){
        for (int i = 0; i < mensajes.size(); i++) {
            System.out.println(mensajes.get(i).getSender()+"---"+mensajes.get(i).getDestinatario());
        }
    }
    
    /**
     * Metodo que recibe los mensajes a enviar. y los almacena en un LinkedList de
     * Mensages por enviar.
     * @param message 
     */
    public void post(Message message){        //hecho
        mensajes.add(message);        
    }
    

    public void addMailClient(MailClient client){
        clientes.add(client);
    }

    /**
     * @return the nameServer
     */
    public String getNameServer() {
        return nameServer;
    }

    /**
     * @param nameServer the nameServer to set
     */
    public void setNameServer(String nameServer) {
        this.nameServer = nameServer;
    }

    /**
     * @return the clientes
     */
    public LinkedList<MailClient> getClientes() {
        return clientes;
    }

    /**
     * @param clientes the clientes to set
     */
    public void setClientes(LinkedList<MailClient> clientes) {
        this.clientes = clientes;
    }

    /**
     * @return the mensajes
     */
    public LinkedList<Message> getMensajes() {
        return mensajes;
    }

    /**
     * @param mensajes the mensajes to set
     */
    public void setMensajes(LinkedList<Message> mensajes) {
        this.mensajes = mensajes;
    }
    
}
